容器化 (Docker) 教程

1. 什么是 Docker?

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中。这些容器可以在任何支持 Docker 的环境中运行,确保应用程序在不同环境中的一致性。

1.1 Docker 的优势

  • 一致性:容器化确保应用程序在开发、测试和生产环境中运行一致。
  • 轻量级:容器共享主机系统的内核,占用资源少,启动速度快。
  • 可移植性:容器可以在任何支持 Docker 的环境中运行,无需担心环境差异。
  • 隔离性:每个容器都是独立的,互不干扰。

2. Docker 的基本概念

2.1 镜像 (Image)

Docker 镜像是一个轻量级、独立的可执行软件包,包含运行应用程序所需的一切:代码、运行时、库、环境变量和配置文件。

2.2 容器 (Container)

容器是镜像的运行实例。你可以创建、启动、停止、移动或删除一个容器。容器是隔离的,每个容器都有自己的文件系统、网络和进程空间。

2.3 Dockerfile

Dockerfile 是一个文本文件,包含一系列指令,用于构建 Docker 镜像。每个指令都会在镜像中创建一个新的层。

2.4 Docker 仓库 (Registry)

Docker 仓库是存储和分发 Docker 镜像的地方。最常用的公共仓库是 Docker Hub。

3. 安装 Docker

3.1 在 Linux 上安装 Docker

# 更新包管理器
sudo apt-get update

# 安装 Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 启动 Docker 服务
sudo systemctl start docker

# 设置 Docker 开机自启
sudo systemctl enable docker

3.2 在 macOS 上安装 Docker

下载并安装 Docker Desktop for Mac 应用程序。

3.3 在 Windows 上安装 Docker

下载并安装 Docker Desktop for Windows 应用程序。

4. 创建第一个 Docker 容器

4.1 拉取镜像

docker pull hello-world

4.2 运行容器

docker run hello-world

4.3 查看容器

docker ps -a

5. 使用 Dockerfile 构建镜像

5.1 创建 Dockerfile

# 使用官方 Node.js 镜像作为基础
FROM node:14

# 设置工作目录
WORKDIR /app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 3000

# 启动应用
CMD ["npm", "start"]

5.2 构建镜像

docker build -t my-express-app .

5.3 运行容器

docker run -p 3000:3000 my-express-app

6. 实践练习

6.1 创建一个简单的 Express.js 应用

mkdir my-express-app
cd my-express-app
npm init -y
npm install express

创建 index.js 文件:

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`App listening at http://localhost:${port}`);
});

6.2 创建 Dockerfile

FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]

6.3 构建并运行容器

docker build -t my-express-app .
docker run -p 3000:3000 my-express-app

访问 http://localhost:3000,你应该会看到 "Hello World!"。

7. 总结

通过本教程,你已经学会了 Docker 的基本概念、安装方法以及如何使用 Dockerfile 构建和运行容器。Docker 是一个强大的工具,能够帮助你简化应用程序的部署和管理。继续探索 Docker 的更多功能,如 Docker Compose、Docker Swarm 和 Kubernetes,以进一步提升你的容器化技能。

8. 进一步学习资源

希望这篇教程能帮助你顺利入门 Docker,并在实际项目中应用容器化技术!